5 Analisis de datos
5.1 Cargar de datos
Ahora demostraremos como cargar la data tanto para r-studio de escritorio como para R- cloud (versión online).
5.1.1 En R-Studio
Para importar bases de datos en formato Excel en R- studio se ingresa en la ventana 2 en donde dice Import Dataset como se observa en la siguiente imagen.
Luego aparece una ventana en donde buscamos nuestra base de datos en nuestro computador, y una vez seleccionado el archivo aparece una segunda ventana llamada Import Dataset como se muestra en las dos siguientes imágenes. En la primera es la forma correcta de subir la base de datos como se encuentra demarcado el Heading colocamos YES esto es con el fin de que la base de datos que subamos tenga el encabezado correspondiente como se encuentra demostrado en la imagen.
De lo contrario se puede ver en la imagen dos lo que sucede si ponemos NO en donde el encabezado se muestra como una observación más.
Una vez importada la base de datos podemos ver que aparece como Data Frame en la ventana 2, en esta también nos muestra características básicas como la cantidad de observaciones que posee el Data Frame. También se puede observar en la consola que se importó el archivo correctamente, es recomendable copiar y pegar en el script lo demarcado , así cada vez que queramos trabajar se subirá automáticamente la base de datos.
5.1.2 R- cloud
En cuanto a R-Cloud se suben los archivos un poco diferentes, en este nos tenemos que dirigir la ventana 4 en donde dice Upload, esto abrirá una ventana llamada Target directory presionamos donde die elegir archivo, con esto nos abre otra ventana en donde debemos buscar el archivo que dejamos importar.
Esto creara un archivo en la ventana 4 como se muestra en la siguiente imagen. Y ahora se procede a realizar la importación del archivo en la segunda ventana como se realiza en R- Studio.
5.2 tipos de datos en tibble
5.3 Combinar base de datos
Cuando se trabaja con grandes cantidades de datos, a veces es necesario combinar bases de datos para consolidarlo en una que contenga toda la información. En este capítulo veremos diferente forma de realizar datos relacionales, pero primero hay que tener en cuenta la siguiente recomendación:
- Debes extraer los datos básicos de cada base de datos como.
- La cantidad de filas y columnas por cada base de datos.
- De qué tipo son las columnas, por ejemplo, si son numéricas o carácter .
- Revisar cuidadosamente la visualización de la base de datos para observar si existen algún punto en común entre las bases de datos.
- Debes conocer que representa cada variable de base de datos.
- luego realiza un diagrama para ver las variables en común.
Como se observa en la siguiente imagen.
En segundo lugar, hay que tener en cuenta las tres familias de verbos diseñados para trabajar con datos relacionales:
- filtering joins (Filtrado de combinaciones) , que filtran las observaciones de un marco de datos en función de si coinciden o no con una observación de la otra tabla.
- set operations (Establecer operaciones) , que tratan las observaciones como si fueran elementos establecidos.
- mutating joins (Uniones de trasformación) , que agregan nuevas variables a un marco de datos a partir de observaciones coincidentes en otro.
5.3.1 mutating joins (Uniones de trasformación)
Esta busca combinar variables a partir de dos tablas, en la que busca coincidencias de observaciones de acuerdo con su put y luego copia las variables de una tabla en la otra.
Tal como mutate(), las funciones de unión agregan variables hacia la derecha, por lo que, si tienes muchas variables inicialmente, las nuevas variables no se imprimirán.
Uno de los más simples es a través de mage() para hacer cruces de tablas
imagen
Para ello crearemos 2 bases baseA y baseB con una llave o columna en común ID.
## ID A
## 1 1 x1
## 2 2 x2
## 3 3 x3
## 4 4 x4
## 5 5 x5
## 6 6 x6
## ID B
## 1 1 y1
## 2 2 y2
## 3 3 y3
## 4 4 y4
## 5 5 y5
## 6 6 y6
Para unir la baseA y en la baseB utilizaremos merge() para crear la base AB.
## ID A B
## 1 1 x1 y1
## 2 2 x2 y2
## 3 3 x3 y3
## 4 4 x4 y4
## 5 5 x5 y5
## 6 6 x6 y6
5.3.1.1 Unión interior
La forma más simple de unión es la unión interior (del inglés inner join). Como se muestra en la siguiente imagen:
Pero primero crearemos 3 vectores ID, A y B para luego crear un baseA y baseB.
A continuación, en vez de crear un base llamada baseAB se concatena la baseA con la baseB para llamarse baseA.
## ID A B
## 1 1 x1 y1
## 2 2 x2 y2
## 3 3 x3 y3
## 4 4 x4 y4
## 5 5 x5 y5
## 6 6 x6 y6
Como se observas se unieron las baseA y baseB, una unión interior mantiene las observaciones que aparecen en ambas tablas.
5.3.2 Uniones exteriores
Una unión exterior mantiene las observaciones que aparecen en al menos una de las tablas. Existen tres tipos de uniones exteriores:
- Una unión izquierda
left_join()mantiene todas las observaciones en x.
## ID A B
## 1 1 x1 y1
## 2 2 x2 y2
## 3 3 x3 <NA>
## 4 4 x4 y4
## 5 5 x5 y5
## 6 6 x6 y6
- Una unión derecha
right_join()mantiene todas las observaciones en y.
## ID A B
## 1 1 x1 y1
## 2 2 x2 y2
## 3 3 x3 y3
## 4 5 x5 y5
## 5 6 x6 y6
## 6 4 <NA> y4
- Una unión completa
full_join()mantiene todas las observaciones en x e y. observaciones en y.
## ID A B
## 1 1 x1 y1
## 2 2 x2 y2
## 3 4 x4 y4
## 4 5 x5 <NA>
## 5 6 x6 y6
## 6 3 <NA> y3
5.3.2.1 claves duplicadas
Pero que sucede si la id esta duplicada ¿cómo podemos unirlas? para ellos nos pondremos en dos escenarios diferentes.
- El primero en una tabla tiene claves duplicadas. Esto es útil cuando quieres agregar información adicional dado que típicamente existe una relación uno a muchos.
## ID A B
## 1 1 x1 y1
## 2 2 x2 y2
## 3 1 x3 y1
## 4 2 x4 y2
- Ambas tablas tienen claves duplicadas. Esto es usualmente un error debido a que en ninguna de las tablas las claves identifican de manera única una observación. Cuando unes claves duplicadas, se obtienen todas las posibles combinaciones, es decir, el producto cartesiano:
## ID A B
## 1 1 x1 y1
## 2 2 x2 y2
## 3 2 x2 y3
## 4 2 x3 y2
## 5 2 x3 y3
## 6 3 x4 y4
5.3.2.2 otras formas
| con dplyr | con merge |
|---|---|
inner_join(base1, base2) |
merge(base1, base2) |
full_join(base1, base2) |
merge(base1, base2, all.x = TRUE, all.y = TRUE) |
right_join(base1, base2) |
merge(base1, base2, all.y = TRUE) |
left_join(base1, base2) |
merge(base1, base2, all.x = TRUE) |
La ventaja de los verbos específicos de dplyr es que muestran de manera clara la intención del código: la diferencia entre las uniones es realmente importante, pero se esconde en los argumentos de merge(). Las uniones de dplyr son considerablemente más rápidas y no generan problemas con el orden de las filas.
Si las variables clave tiene diferentes numbre (solo cosas en comun)
merge(base1, base2, by.x="nombre variable base 1", by.y="nombre variable base 2")
Si la variable se llame igual en las dos bases (solo cosas en comun)
merge(base1, base2, by="nombre variable")
Si queremos que se unan todos los casos
all=TRUE: merge(base1, base2, by="nombre variable", all=TRUE)
Si queremos unir por más de una variable: (si las variables se llaman igual en ambas bases)
merge(base1, base2, by=c("variable1", "variable2"))
Si las variables se llaman diferente en ambas bases
merge(base1, base2, by.x=c("variable1", "variable2"), by.y=c("variable1", "variable2"))
Otras formas efectivas de realizar una union de base son los siguientes codigos.
5.3.3 Uniones de filtros
Las uniones de filtro unen observaciones de la misma forma que las uniones de transformación, pero afectan a las observaciones no a las variables. Existen dos tipos:
semi_join(x, y)mantiene todas las observaciones en x con coincidencias en y.
## Joining, by = "ID"
## ID A
## 1 1 x1
## 2 2 x2
## 3 4 x4
## 4 5 x5
anti_join(x, y)descarta todas las observaciones en x con coincidencias en y.
## Joining, by = "ID"
## ID A
## 1 3 x3
Las semi uniones son útiles para unir tablas resumen previamente filtradas con las filas originales. Por ejemplo, imagina que encontraste los diez destinos más populares:
5.4 exploración de la data
Ahora lo realizaremos una exploración de la base de datos , en este caso usaremos la base de datos disponibles llamado AB_NYC_2019.csv, que se encuentra disponible en el siguiente link:
https://www.kaggle.com/dgomonov/new-york-city-airbnb-open-data
Pero primero necesitamos la siguientes Liberia:
Importamos la base de datos a R-Studio como se vio en capítulos anteriores.
5.4.1 Inspección de una tabla
Luego realizamos la visualización de la data.
## Warning in instance$preRenderHook(instance): It seems your data is too big for client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html
Ahora realizaremos una breve descripción de las columnas de la data :
| Variable | Descripción |
|---|---|
| id | Código de hostal |
| name | Nombre de Airbnb |
| host_id | Código de Airbnb |
| host_name | Nombre del anfitrión |
| neighbourhood_group | Distritos de new york |
| neighbourhood | Vecindarios de los distritos |
| latitude | Coordenada latitud |
| longitude | Coordenada de longitud |
| room_type | Tipo de habitación |
| price | Precio |
| minimum_nights | cantidad mínima de noches para una reserva |
| number_of_reviews | Numero de revisiones por mes |
| last_review | Ultimas reseña |
| reviews_per_month | Cantidad de comentarios por mes para la propiedad |
| calculated_host_listings_count | Numero de anuncios |
| availability_365 | número de días en los que la lista está disponible para la reserva. |
Para obtener más información revisamos a través de los códigos como lo siguientes:
Queremos determinar si la base de datos posee algún problema usamos función problems().
## [1] row col expected actual
## <0 rows> (or 0-length row.names)
Para ver la cantidad de observaciones usaremos la función nrow().
## [1] 48895
Cuantas columnas o variables poseen la data con la función ncol().
## [1] 16
si queremos ver las primeras observaciones usamos la función head().
## id name host_id host_name neighbourhood_group neighbourhood latitude longitude room_type
## 1 2539 Clean & quiet apt home by the park 2787 John Brooklyn Kensington 40.64749 -73.97237 Private room
## 2 2595 Skylit Midtown Castle 2845 Jennifer Manhattan Midtown 40.75362 -73.98377 Entire home/apt
## 3 3647 THE VILLAGE OF HARLEM....NEW YORK ! 4632 Elisabeth Manhattan Harlem 40.80902 -73.94190 Private room
## 4 3831 Cozy Entire Floor of Brownstone 4869 LisaRoxanne Brooklyn Clinton Hill 40.68514 -73.95976 Entire home/apt
## 5 5022 Entire Apt: Spacious Studio/Loft by central park 7192 Laura Manhattan East Harlem 40.79851 -73.94399 Entire home/apt
## 6 5099 Large Cozy 1 BR Apartment In Midtown East 7322 Chris Manhattan Murray Hill 40.74767 -73.97500 Entire home/apt
## price minimum_nights number_of_reviews last_review reviews_per_month calculated_host_listings_count availability_365
## 1 149 1 9 2018-10-19 0.21 6 365
## 2 225 1 45 2019-05-21 0.38 2 355
## 3 150 3 0 NA 1 365
## 4 89 1 270 2019-07-05 4.64 1 194
## 5 80 10 9 2018-11-19 0.10 1 0
## 6 200 3 74 2019-06-22 0.59 1 129
## id name host_id host_name neighbourhood_group neighbourhood latitude
## 48890 36484363 QUIT PRIVATE HOUSE 107716952 Michael Queens Jamaica 40.69137
## 48891 36484665 Charming one bedroom - newly renovated rowhouse 8232441 Sabrina Brooklyn Bedford-Stuyvesant 40.67853
## 48892 36485057 Affordable room in Bushwick/East Williamsburg 6570630 Marisol Brooklyn Bushwick 40.70184
## 48893 36485431 Sunny Studio at Historical Neighborhood 23492952 Ilgar & Aysel Manhattan Harlem 40.81475
## 48894 36485609 43rd St. Time Square-cozy single bed 30985759 Taz Manhattan Hell's Kitchen 40.75751
## 48895 36487245 Trendy duplex in the very heart of Hell's Kitchen 68119814 Christophe Manhattan Hell's Kitchen 40.76404
## longitude room_type price minimum_nights number_of_reviews last_review reviews_per_month calculated_host_listings_count
## 48890 -73.80844 Private room 65 1 0 NA 2
## 48891 -73.94995 Private room 70 2 0 NA 2
## 48892 -73.93317 Private room 40 4 0 NA 2
## 48893 -73.94867 Entire home/apt 115 10 0 NA 1
## 48894 -73.99112 Shared room 55 1 0 NA 6
## 48895 -73.98933 Private room 90 7 0 NA 1
## availability_365
## 48890 163
## 48891 9
## 48892 36
## 48893 27
## 48894 2
## 48895 23
Si queremos saber los nombre las columnas o variables se usa la función colnames()
## [1] "id" "name" "host_id" "host_name"
## [5] "neighbourhood_group" "neighbourhood" "latitude" "longitude"
## [9] "room_type" "price" "minimum_nights" "number_of_reviews"
## [13] "last_review" "reviews_per_month" "calculated_host_listings_count" "availability_365"
5.4.2 Selección de filas y columnas
A veces queremos trabajar con un subconjunto de la tabla, como por ejemplo una selección de filas y/o columnas. Para este tipo de selecciones se usa el corchete [].
## Warning in instance$preRenderHook(instance): It seems your data is too big for client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html
## Warning in instance$preRenderHook(instance): It seems your data is too big for client-side DataTables. You may consider server-side processing:
## https://rstudio.github.io/DT/server.html
Como se observó los corchetes tienen dos partes separadas por una coma la que la precede se refiere a las filas que se encuentra a las izquierdas de la coma y a la derecha las columnas.
Pero no es necesario conocer índice de una determinada columna para seleccionarla, ya que los corchetes se pueden utilizar como poniendo el nombre de la columna como se ve a continuación.
## [1] 2539 2595 3647 3831
si queremo extraer y operar sobre columnas individuales de una tabla se utiliza el signo $.
Ahora con la función str() veremos cómo están compuestas las columnas si son numéricas o factor, como también veremos la cantidad de variables y observaciones que posee la data.
## 'data.frame': 48895 obs. of 16 variables:
## $ id : int 2539 2595 3647 3831 5022 5099 5121 5178 5203 5238 ...
## $ name : Factor w/ 47906 levels "","'Fan'tastic",..: 12661 38172 45171 15702 19366 25001 8337 25048 15597 17682 ...
## $ host_id : int 2787 2845 4632 4869 7192 7322 7356 8967 7490 7549 ...
## $ host_name : Factor w/ 11453 levels "","'Cil","-TheQueensCornerLot",..: 5051 4846 2962 6264 5982 1970 3601 9699 6935 1264 ...
## $ neighbourhood_group : Factor w/ 5 levels "Bronx","Brooklyn",..: 2 3 3 2 3 3 2 3 3 3 ...
## $ neighbourhood : Factor w/ 221 levels "Allerton","Arden Heights",..: 109 128 95 42 62 138 14 96 203 36 ...
## $ latitude : num 40.6 40.8 40.8 40.7 40.8 ...
## $ longitude : num -74 -74 -73.9 -74 -73.9 ...
## $ room_type : Factor w/ 3 levels "Entire home/apt",..: 2 1 2 1 1 1 2 2 2 1 ...
## $ price : int 149 225 150 89 80 200 60 79 79 150 ...
## $ minimum_nights : int 1 1 3 1 10 3 45 2 2 1 ...
## $ number_of_reviews : int 9 45 0 270 9 74 49 430 118 160 ...
## $ last_review : Factor w/ 1765 levels "","2011-03-28",..: 1503 1717 1 1762 1534 1749 1124 1751 1048 1736 ...
## $ reviews_per_month : num 0.21 0.38 NA 4.64 0.1 0.59 0.4 3.47 0.99 1.33 ...
## $ calculated_host_listings_count: int 6 2 1 1 1 1 1 1 1 4 ...
## $ availability_365 : int 365 355 365 194 0 129 0 220 0 188 ...
Podemos observar a grandes rasgos que las variables room_type posee 3 niveles., que existe datos vacíos NA en la variable reviews_per_month y que neighbourhood posee 221 niveles.
Ahora veremos si existen datos vacíos en la data con la función sapply() y para buscar los datos vacíos en se utiliza is.na().
## id name host_id host_name
## 0 0 0 0
## neighbourhood_group neighbourhood latitude longitude
## 0 0 0 0
## room_type price minimum_nights number_of_reviews
## 0 0 0 0
## last_review reviews_per_month calculated_host_listings_count availability_365
## 0 10052 0 0
Observamos que en las variables reviews_per_month posee 10052 datos vacíos y para ver los datos vacíos es lo mismo pero con is.null().
## id name host_id host_name
## 0 0 0 0
## neighbourhood_group neighbourhood latitude longitude
## 0 0 0 0
## room_type price minimum_nights number_of_reviews
## 0 0 0 0
## last_review reviews_per_month calculated_host_listings_count availability_365
## 0 0 0 0
No existe datos nulos en la data como se puede observar. Ahora para eliminar los datos vacíos observados anteriormente.
Veremos si las observaciones fueron eliminadas.
## [1] 38843
5.4.3 Exploración de las variables
Realizaremos la exploración de la variable ID, lo primero que veremos si los datos de esta variable son datos únicos, para ello crearemos la data id y usaremos la función select() que nos ayudara seleccionar la base y las variables que deseamos observar, y además utilizaremos la función unique para ver si son únicas en su valor.
## [1] 38843
La data tiene 48895 datos y la columna ID igual por lo que no existen datos repetidos.
Con la variable name veremos si existen datos vacíos en la data y cual es id de estos datos vacíos.
## [1] id name
## <0 rows> (or 0-length row.names)
No existe datos vacíos. Ahora siguiéremos saber el nombre especifico de un id, usaremos el mismo código anterior, pero en la función filter colocamos id == que representa el igual y el id que deseamos buscar en este caso es el 2232600..
## id name
## 1 2232600
Como observamos no existe nombre, esto demuestra a a veces es bueno realizar más de una revisión. para solucionar estos problemas remplazaremos los datos en blanco por No .
## Warning in `[<-.factor`(`*tmp*`, airbnb$name == "", value = structure(c(12661L, : invalid factor level, NA generated
## id name
## 1 2232600 <NA>
## 2 4209595 <NA>
## 3 4370230 <NA>
## 4 9325951 <NA>
## 5 10052289 <NA>
## 6 22275821 <NA>
Antes de eliminarlo tenemos que ver si estos datos son relevantes para nuestro estudio y si esas variables la utilizaremos más adelante.
## Warning in `[<-.factor`(`*tmp*`, airbnb$host_name == "", value = structure(c(5051L, : invalid factor level, NA generated
Ahora veremos la variable neighbourhood_group cuales son los niveles de esta variable.
## neighbourhood_group
## 1 Brooklyn
## 2 Manhattan
## 47 Queens
## 170 Staten Island
## 172 Bronx
Vemos que son 5 distritos. Y en cuento a la variable neighbourhood con el mismo condigo anterior.
## neighbourhood
## 1 Kensington
## 2 Midtown
## 4 Clinton Hill
## 5 East Harlem
## 6 Murray Hill
## 7 Bedford-Stuyvesant
## 8 Hell's Kitchen
## 9 Upper West Side
## 10 Chinatown
## 13 South Slope
## 15 West Village
## 16 Williamsburg
## 17 Fort Greene
## 18 Chelsea
## 19 Crown Heights
## 22 Park Slope
## 26 Windsor Terrace
## 29 Inwood
## 30 East Village
## 31 Harlem
## 33 Greenpoint
## 38 Bushwick
## 40 Lower East Side
## 46 Prospect-Lefferts Gardens
## 47 Long Island City
## 55 Kips Bay
## 60 SoHo
## 63 Upper East Side
## 64 Prospect Heights
## 74 Washington Heights
## 78 Woodside
## 84 Flatbush
## 86 Brooklyn Heights
## 102 Carroll Gardens
## 110 Gowanus
## 137 Flatlands
## 143 Cobble Hill
## 144 Flushing
## 159 Boerum Hill
## 162 Sunnyside
## 164 DUMBO
## 170 St. George
## 172 Highbridge
## 175 Financial District
## 182 Ridgewood
## 183 Morningside Heights
## 197 Jamaica
## 200 Middle Village
## 212 NoHo
## 219 Ditmars Steinway
## 224 Flatiron District
## 228 Roosevelt Island
## 235 Greenwich Village
## 242 Little Italy
## 247 East Flatbush
## 250 Tompkinsville
## 258 Astoria
## 262 Eastchester
## 310 Kingsbridge
## 343 Two Bridges
## 361 Queens Village
## 368 Rockaway Beach
## 404 Forest Hills
## 420 Nolita
## 434 Woodlawn
## 485 University Heights
## 495 Gramercy
## 511 Allerton
## 522 East New York
## 554 Theater District
## 558 Concourse Village
## 561 Sheepshead Bay
## 572 Emerson Hill
## 576 Fort Hamilton
## 578 Bensonhurst
## 588 Tribeca
## 599 Shore Acres
## 609 Sunset Park
## 611 Concourse
## 651 Elmhurst
## 672 Brighton Beach
## 684 Jackson Heights
## 695 Cypress Hills
## 699 St. Albans
## 703 Arrochar
## 737 Rego Park
## 738 Wakefield
## 867 Clifton
## 884 Bay Ridge
## 958 Graniteville
## 967 Spuyten Duyvil
## 968 Stapleton
## 975 Briarwood
## 976 Ozone Park
## 977 Columbia St
## 1034 Vinegar Hill
## 1061 Mott Haven
## 1070 Longwood
## 1071 Canarsie
## 1109 Battery Park City
## 1140 Civic Center
## 1163 East Elmhurst
## 1179 New Springville
## 1194 Morris Heights
## 1328 Arverne
## 1341 Gravesend
## 1425 Tottenville
## 1508 Mariners Harbor
## 1558 Concord
## 1608 Borough Park
## 1689 Bayside
## 1690 Downtown Brooklyn
## 1725 Port Morris
## 1750 Fieldston
## 1803 Kew Gardens
## 1872 Midwood
## 1883 College Point
## 1966 Mount Eden
## 2106 City Island
## 2195 Glendale
## 2259 Red Hook
## 2442 Richmond Hill
## 2828 Maspeth
## 2840 Port Richmond
## 2931 Williamsbridge
## 2984 Soundview
## 3021 Woodhaven
## 3051 Co-op City
## 3102 Stuyvesant Town
## 3240 Parkchester
## 3350 North Riverdale
## 3396 Dyker Heights
## 3440 Bronxdale
## 3762 Sea Gate
## 3810 Riverdale
## 3825 Kew Gardens Hills
## 3965 Bay Terrace
## 4036 Norwood
## 4141 Claremont Village
## 4167 Whitestone
## 4227 Fordham
## 4374 Bayswater
## 4478 Navy Yard
## 4805 Brownsville
## 4862 Eltingville
## 5218 Mount Hope
## 5467 Clason Point
## 5546 Lighthouse Hill
## 5612 Springfield Gardens
## 5841 Howard Beach
## 5994 Belle Harbor
## 6054 Jamaica Estates
## 6109 Van Nest
## 6369 Bellerose
## 6539 Fresh Meadows
## 6933 Morris Park
## 6942 West Brighton
## 7135 Far Rockaway
## 7226 South Ozone Park
## 7227 Tremont
## 7301 Corona
## 7770 Great Kills
## 8019 Manhattan Beach
## 8289 Marble Hill
## 8783 Dongan Hills
## 9564 East Morrisania
## 9764 Hunts Point
## 9987 Neponsit
## 10133 Pelham Bay
## 10261 Randall Manor
## 10711 Throgs Neck
## 10723 Todt Hill
## 10735 West Farms
## 10835 Silver Lake
## 11212 Laurelton
## 11624 Grymes Hill
## 11739 Holliswood
## 11895 Pelham Gardens
## 12766 Rosedale
## 13683 Castleton Corners
## 13738 Edgemere
## 13816 New Brighton
## 14236 Baychester
## 14749 Melrose
## 15431 Bergen Beach
## 15778 Cambria Heights
## 16036 Richmondtown
## 17313 Howland Hook
## 17398 Schuylerville
## 17596 Coney Island
## 18445 Prince's Bay
## 18519 South Beach
## 19110 Bath Beach
## 19470 Midland Beach
## 19556 Jamaica Hills
## 19900 Oakwood
## 20197 Castle Hill
## 21630 Douglaston
## 21848 Huguenot
## 22282 Edenwald
## 22311 Belmont
## 22595 Grant City
## 23450 Westerleigh
## 23868 Morrisania
## 25147 Bay Terrace, Staten Island
## 25189 Westchester Square
## 25292 Little Neck
## 25862 Rosebank
## 25881 Unionport
## 26236 Mill Basin
## 26403 Hollis
## 29605 Arden Heights
## 29739 Bull's Head
## 30608 Olinville
## 33262 Rossville
## 33699 Breezy Point
## 34162 Willowbrook
## 34939 New Dorp Beach
Con la variable price veremos el promedio , máximo, varianza y mínimo.
## mean variance min max
## 1 142.3179 38787.58 0 10000
El mínimo es 0 por que existen hospedaje con precio 0 esto es ilógico para una empresa por lo que se busca identificar cuáles son estos datos.
## id price
## 1 18750597 0
## 2 20333471 0
## 3 20523843 0
## 4 20608117 0
## 5 20624541 0
## 6 20639628 0
## 7 20639792 0
## 8 20639914 0
## 9 21291569 0
## 10 21304320 0
Son 10 datos y como los ID son datos únicos se entiende que estos datos no se repitieran. esta columna es relevante por lo que se elimina los 11 datos nulos.
airbnb <-airbnb [airbnb$price!="0",] #elimina los 0
summarise(airbnb, mean = mean(price), variance = var(price), min = min(price), max = max(price))## mean variance min max
## 1 142.3546 38792.35 10 10000
Con la variable minimum_nights.
## mean variance min max
## 1 5.867561 302.2754 1 1250
Existen máximos con más de 365 días por lo que se determina que no es coherente por lo que se elimina las celdas mayores a 365.
## [1] 6
cuando queremos eliminar observaciones especificas utilizaos el siguente codigo.
Se elimina para no afectar la data y verificamos.
## mean variance min max
## 1 5.74953 195.6422 1 365
Ahora veremos la variable number_of_reviews.
## mean variance min max
## 1 29.29801 2322.392 1 629